#study6从 字典的创建 到 字典的修改 到 字典的遍历 再到 元组

#字典的格式：
s2={'test':123,'TEST':456}#值成对出现(键值对)，数据是无序的（列表是有序的）
#列表、字典是可变序列，字符串、整数是不可变序列

#字典的特点：
#字典的key是不可重复的(否则value之后的key会被覆盖)，不可变的；字典的元素是无序的；字典会浪费存储空间

#字典的创建
s={'test':3.14159,'TEST':2.71828}#第一种创建方式
print(s,type(s))
s1=dict(name='张三',age=30)#用dict()函数的第二种创建方式
print(s1,type(s1))
s2={}
print(s2)#空字典的创建

#字典元素的获取
print(s['test'])#用方括号获取,如果没有key报错：keyError
print(s1.get('TEST'))#get()函数获取法，如果没有这个值返回值‘None’
print(s1.get('test',750))#如果没有key：'test'，返回值750;但不会影响s1的值

#字典元素的判断
print('test' in s)

#字典的删除与增加
del s['TEST']#删除操作
print(s)
s['TEST2']=2.71828#增加操作，如果增加key在原字典中存在，会自动覆盖原来的值
print(s)
s1.clear()#清空列表
print(s1)

#字典信息的获取
print(s.keys())#keys()函数用于获取字典中所有的key
print(s.values())#values()获取字典中所有的value
print(s.items())#items()获取所有key与value对
#还可以用这种方法得到列表
print(list(s.keys()))
print(list(s.items()))#括号中的内容是一种新的数据类型：元组

#字典的遍历
for sn in s:
    print(sn,s[sn],s.get(sn))

#字典生成式
e=['test','TEST']
r=[123,456]#如果有r的元素有多余会自动忽略掉多余的元素
bian={ebian:rbian for ebian,rbian in zip(e,r)}#zip()函数，用于将可迭代的对象作为参数，将对象中对应的元素打包成元组，然后返回由元组组成的列表；
#从左到右：key的表达式;value的表达式;自定义key的变量;自定义value的变量;zip(可迭代对象，就是key与value的变量)
print(bian)

#元组
#元组是Python的内置数据结构，是不可变序列(没有增、删、改操作(字符串与元组是不可变序列)，可变序列可以增删改且ip不变)

#元组的创建
t=('test','TEST',2.71828)#第一种创建方式(可以省略小括号)
print(t,type(t))
t1=tuple(('test','TEST',3.14159))#第二种创建方式
print(t1)
t2=('hello',)#只有一个元素的元组
print(t2)
t3=()#空元组的创建
print(t3,type(t3))

#为什么要把元组设计为不可变序列：1、在多任务环境下，同时操作时不需用上锁；
t4=('test',[123,456],789)
#元组的获取
print(t4[1])
'''
注意事项：
如果元组中对象本身为不可变对象，则不能再引发其他对象
如果元组中对象本身为可变对象，则可变对象无法整个改变，但数据可以改变
'''
#元组中的列表的添加操作
t4[1].append('test')
print(t4[1])

#元组的遍历
for t4number in t4:
    print(t4number)
